package route

// 【 *** 此文件为自动生成，禁止私加代码 *** 】

var apiRouteList []IApiRoute

type ApiRoute struct {
	URL         string      // 路由URL
	Name        string      // 路由名称
	Method      string      // 路由名称
	Middlewares []string    // 路由中间件
	Roles       []string    // 路由权限组
	Output      string      // 接口处理器
	Limiter     LimitOption // 接口限流器
	Func        interface{} // 接口实现函数
}

type LimitOption struct {
	Type         string // 限流器类型
	Mode         string // 限流模式
	Cap          int64  // 容量数
	IntervalTime int64  // 令牌间隔时间(毫秒)
	ExpireTime   int64  // 令牌过期时间(毫秒)
}

// Register 注册api
func Register(
	url, name, method string,
	f interface{},
	middlewares, roles []string,
	output string,
	limiter LimitOption,
) IApiRoute {
	if url == "" {
		panic("路由URL不能为空")
	}
	ar := ApiRoute{
		URL:         url,
		Name:        name,
		Method:      method,
		Func:        f,
		Middlewares: middlewares,
		Roles:       roles,
		Output:      output,
		Limiter:     limiter,
	}
	apiRouteList = append(apiRouteList, ar)
	return ar
}

// GetGenApiRouteList 获取所有的api路由的数据列表
func GetGenApiRouteList() []IApiRoute {
	return apiRouteList
}

// GetRouteByURL 通过路由获取接口配置信息
func GetRouteByURL(url string) IApiRoute {
	for _, route := range apiRouteList {
		if route.GetURL() == url {
			return route
		}
	}
	return nil
}

type IApiRoute interface {
	GetInfo() ApiRoute
	GetName() string
	GetURL() string
	GetFunc() interface{}
}

func (a ApiRoute) GetInfo() ApiRoute {
	return a
}

func (a ApiRoute) GetName() string {
	return a.Name
}

func (a ApiRoute) GetURL() string {
	return a.URL
}

func (a ApiRoute) GetFunc() interface{} {
	return a.Func
}
